//
//  STAdmobProtocol.swift
//  iPhone
//
//  Created by Toj on 4/11/23.
//


public protocol STAdmobObjectDelegate: NSObjectProtocol {
    
    /* 广告展示成功 */
    func admobObjectDidPresentContent(_ admobObject: STAdmobObject, admobModel: STAdmobModel?)
    /* 广告展示失败 */
    func admobObject(_ admobObject: STAdmobObject, admobModel: STAdmobModel?, didFailToPresentFullScreenContent error: Error?)
    
    /* 广告退出 */
    /* 广告即将退出 */
    func admobObjectWillDismissComplete(_ admobObject: STAdmobObject, admobModel: STAdmobModel?, showedTime: TimeInterval)
    /* 已经退出 */
    func admobObjectDidDismissComplete(_ admobObject: STAdmobObject, admobModel: STAdmobModel?)
    
    /* 广告点击 */
    func admobObjectDidRecordClick(_ admobObject: STAdmobObject, admobModel: STAdmobModel?)
}

/*
 * 广告加载规范协议
 */
public protocol STAdmobProtocol {
    var delegate: STAdmobObjectDelegate? { get set }
    
    /*
     * 读取是否有 预加载完成的 广告对象
     */
    func isPreparedAd(admobModel: STAdmobModel) -> Bool
    
    /*
     * 预加载广告对象
     * NOTE: 只预加载 广告对象, 不做其他操作
     * 如果 预加载广告进行中/ 有完成的预加载广告对象, 不预加载其他广告对象
     * TIP: 一般在app 启动才会调用
     */
    func preloadCacheAd(admobModel: STAdmobModel)
    
    /*
     * 替换 预加载 广告对象
     * 如果上一个预加载成功未展示, 直接返回
     * 如果有一个成功预加载, 跳过其他请求成功广告对象
     *
     */
    func replacePreloadCacheAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?)
  
    /*
     * 预加载 广告对象,
     * 有预加载 广告对象 && prleadUnitID == 新广告.materials: 待展示
     * 无预加载 广告对象 || prleadUnitID != 新广告.materials: 加载 广告对象, 加载完后缓存广告对象 待展示
     */
    func preloadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?)
    
    /* 加载新广告对象 */
    func loadAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?)
    
    /* 展示 广告对象 */
    func presentAd(from vc: UIViewController)
}

extension STAdmobProtocol {
    /* 更新预加载 广告数据 并且预加载 广告对象 */
    func replacePreloadCacheAd(admobModel: STAdmobModel, completion: ((_ isSuccess: Bool)->Void)?) { }
}
